home *** CD-ROM | disk | FTP | other *** search
Wrap
package mx.managers { import flash.desktop.Clipboard; import flash.desktop.NativeDragManager; import flash.desktop.NativeDragOptions; import flash.display.BitmapData; import flash.display.DisplayObject; import flash.display.InteractiveObject; import flash.events.MouseEvent; import flash.events.NativeDragEvent; import flash.geom.Point; import flash.system.Capabilities; import mx.core.DragSource; import mx.core.IFlexDisplayObject; import mx.core.IUIComponent; import mx.core.UIComponentGlobals; import mx.core.mx_internal; import mx.events.DragEvent; import mx.events.FlexEvent; import mx.managers.dragClasses.DragProxy; import mx.styles.CSSStyleDeclaration; import mx.styles.StyleManager; use namespace mx_internal; public class NativeDragManagerImpl implements IDragManager { private static var sm:ISystemManager; private static var instance:IDragManager; private var _dragImage:IFlexDisplayObject; private var _relatedObject:InteractiveObject; private var _allowedActions:NativeDragOptions; private var _action:String; private var _clipboard:Clipboard; public var dragProxy:DragProxy; private var _dragInitiator:IUIComponent; private var mouseIsDown:Boolean = false; private var _offset:Point; private var _allowMove:Boolean; public function NativeDragManagerImpl() { super(); if(instance) { throw new Error("Instance already exists."); } mx_internal::registerSystemManager(sm); } public static function getInstance() : IDragManager { if(!instance) { sm = SystemManagerGlobals.topLevelSystemManagers[0]; instance = new NativeDragManagerImpl(); } return instance; } public function getFeedback() : String { return NativeDragManager.dropAction; } mx_internal function unregisterSystemManager(param1:ISystemManager) : void { if(param1.isTopLevel()) { param1.removeEventListener(MouseEvent.MOUSE_DOWN,sm_mouseDownHandler); param1.removeEventListener(MouseEvent.MOUSE_UP,sm_mouseUpHandler); } param1.stage.removeEventListener(NativeDragEvent.NATIVE_DRAG_ENTER,nativeDragEventHandler,true); param1.stage.removeEventListener(NativeDragEvent.NATIVE_DRAG_COMPLETE,nativeDragEventHandler,true); param1.stage.removeEventListener(NativeDragEvent.NATIVE_DRAG_DROP,nativeDragEventHandler,true); param1.stage.removeEventListener(NativeDragEvent.NATIVE_DRAG_EXIT,nativeDragEventHandler,true); param1.stage.removeEventListener(NativeDragEvent.NATIVE_DRAG_OVER,nativeDragEventHandler,true); param1.stage.removeEventListener(NativeDragEvent.NATIVE_DRAG_START,nativeDragEventHandler,true); } mx_internal function registerSystemManager(param1:ISystemManager) : void { if(param1.isTopLevel()) { param1.addEventListener(MouseEvent.MOUSE_DOWN,sm_mouseDownHandler); param1.addEventListener(MouseEvent.MOUSE_UP,sm_mouseUpHandler); } param1.stage.addEventListener(NativeDragEvent.NATIVE_DRAG_ENTER,nativeDragEventHandler,true); param1.stage.addEventListener(NativeDragEvent.NATIVE_DRAG_COMPLETE,nativeDragEventHandler,true); param1.stage.addEventListener(NativeDragEvent.NATIVE_DRAG_DROP,nativeDragEventHandler,true); param1.stage.addEventListener(NativeDragEvent.NATIVE_DRAG_EXIT,nativeDragEventHandler,true); param1.stage.addEventListener(NativeDragEvent.NATIVE_DRAG_OVER,nativeDragEventHandler,true); param1.stage.addEventListener(NativeDragEvent.NATIVE_DRAG_START,nativeDragEventHandler,true); } private function sm_mouseUpHandler(param1:MouseEvent) : void { mouseIsDown = false; } public function get isDragging() : Boolean { return NativeDragManager.isDragging; } public function doDrag(param1:IUIComponent, param2:DragSource, param3:MouseEvent, param4:IFlexDisplayObject = null, param5:Number = 0, param6:Number = 0, param7:Number = 0.5, param8:Boolean = true) : void { var _loc9_:Number = NaN; var _loc10_:Number = NaN; var _loc12_:String = null; var _loc13_:Object = null; var _loc14_:CSSStyleDeclaration = null; var _loc15_:Class = null; if(isDragging) { return; } if(!(param3.type == MouseEvent.MOUSE_DOWN || param3.type == MouseEvent.CLICK || mouseIsDown || param3.buttonDown)) { return; } _clipboard = new Clipboard(); _dragInitiator = param1; _offset = new Point(param5,param6); _allowMove = param8; _offset.y -= InteractiveObject(param1).mouseY; _offset.x -= InteractiveObject(param1).mouseX; _allowedActions = new NativeDragOptions(); _allowedActions.allowCopy = true; _allowedActions.allowLink = true; _allowedActions.allowMove = param8; var _loc11_:int = 0; while(_loc11_ < param2.formats.length) { _loc12_ = param2.formats[_loc11_] as String; _loc13_ = param2.dataForFormat(_loc12_); _clipboard.setData(_loc12_,_loc13_); _loc11_++; } if(!param4) { _loc14_ = StyleManager.getStyleDeclaration("DragManager"); _loc15_ = _loc14_.getStyle("defaultDragImageSkin"); param4 = new _loc15_(); _loc9_ = !!param1 ? Number(param1.width) : 0; _loc10_ = !!param1 ? Number(param1.height) : 0; if(param4 is IFlexDisplayObject) { IFlexDisplayObject(param4).setActualSize(_loc9_,_loc10_); } } else { _loc9_ = Number(param4.width); _loc10_ = Number(param4.height); } _dragImage = param4; if(param4 is IUIComponent && param4 is ILayoutManagerClient && !ILayoutManagerClient(param4).initialized && Boolean(param1)) { param4.addEventListener(FlexEvent.UPDATE_COMPLETE,initiateDrag); param1.systemManager.popUpChildren.addChild(DisplayObject(param4)); if(param4 is ILayoutManagerClient) { UIComponentGlobals.mx_internal::layoutManager.validateClient(ILayoutManagerClient(param4),true); } if(param4 is IUIComponent) { param4.setActualSize(_loc9_,_loc10_); _loc9_ = Number((param4 as IUIComponent).getExplicitOrMeasuredWidth()); _loc10_ = Number((param4 as IUIComponent).getExplicitOrMeasuredHeight()); } else { _loc9_ = Number(param4.measuredWidth); _loc10_ = Number(param4.measuredHeight); } if(param4 is ILayoutManagerClient) { UIComponentGlobals.mx_internal::layoutManager.validateClient(ILayoutManagerClient(param4)); } return; } initiateDrag(null,false); } public function showFeedback(param1:String) : void { if(param1 == DragManager.MOVE && !_allowedActions.allowMove) { return; } if(param1 == DragManager.COPY && !_allowedActions.allowCopy) { return; } if(param1 == DragManager.LINK && !_allowedActions.allowLink) { return; } NativeDragManager.dropAction = param1; } public function acceptDragDrop(param1:IUIComponent) : void { var _loc2_:InteractiveObject = param1 as InteractiveObject; if(_loc2_) { NativeDragManager.acceptDragDrop(_loc2_); } } private function initiateDrag(param1:FlexEvent, param2:Boolean = true) : void { var _loc3_:BitmapData = null; if(param2) { _dragImage.removeEventListener(FlexEvent.UPDATE_COMPLETE,initiateDrag); } if(Boolean(_dragImage.width) && Boolean(_dragImage.height)) { _loc3_ = new BitmapData(_dragImage.width,_dragImage.height,true,0); } else { _loc3_ = new BitmapData(1,1,true,0); } _loc3_.draw(_dragImage); if(param2 && _dragImage is IUIComponent && Boolean(_dragInitiator)) { _dragInitiator.systemManager.popUpChildren.removeChild(DisplayObject(_dragImage)); } NativeDragManager.doDrag(InteractiveObject(_dragInitiator),_clipboard,_loc3_,_offset,_allowedActions); } public function endDrag() : void { } private function sm_mouseDownHandler(param1:MouseEvent) : void { mouseIsDown = true; } private function nativeDragEventHandler(param1:NativeDragEvent) : void { var _loc8_:String = null; var _loc9_:Object = null; var _loc12_:int = 0; var _loc2_:String = param1.type.charAt(6).toLowerCase() + param1.type.substr(7); var _loc3_:DragSource = new DragSource(); var _loc4_:DisplayObject = param1.target as DisplayObject; var _loc5_:Clipboard = param1.clipboard; var _loc6_:Array = _loc5_.formats; var _loc7_:int = int(_loc6_.length); _allowedActions = param1.allowedActions; var _loc10_:Boolean = false; if(Capabilities.os.substring(0,3) == "Mac") { _loc10_ = Boolean(param1.commandKey); } else { _loc10_ = Boolean(param1.controlKey); } if(NativeDragManager.dragInitiator != null) { NativeDragManager.dropAction = _loc10_ || !_allowMove ? DragManager.COPY : DragManager.MOVE; } if(param1.type != NativeDragEvent.NATIVE_DRAG_EXIT) { _loc12_ = 0; while(_loc12_ < _loc7_) { _loc8_ = _loc6_[_loc12_]; if(_loc5_.hasFormat(_loc8_)) { _loc9_ = _loc5_.getData(_loc8_); _loc3_.addData(_loc9_,_loc8_); } _loc12_++; } } if(param1.type == NativeDragEvent.NATIVE_DRAG_DROP) { _relatedObject = param1.target as InteractiveObject; } var _loc11_:DragEvent = new DragEvent(_loc2_,false,param1.cancelable,NativeDragManager.dragInitiator as IUIComponent,_loc3_,param1.dropAction,_loc10_,param1.altKey,param1.shiftKey); _loc11_.buttonDown = param1.buttonDown; _loc11_.delta = param1.delta; _loc11_.localX = param1.localX; _loc11_.localY = param1.localY; if(_loc2_ == DragEvent.DRAG_COMPLETE) { _loc11_.relatedObject = _relatedObject; } else { _loc11_.relatedObject = param1.relatedObject; } _loc4_.dispatchEvent(_loc11_); } } }